草庐IT

Java OutOfMemoryError 奇怪的行为

全部标签

c++ - 调试会改变多线程 C++ 程序的行为吗?

我正在开发一个处理大量同步问题的多线程C++程序。我正在使用VisualStudio2008。当我使用断点调试程序时,程序的运行时行为(跨线程执行语句的顺序)似乎发生了变化。这可以解释吗?这里的概念是什么?我希望执行顺序保持不变。第二个问题-Thread1是否被等待函数调用阻塞。Thread2有等待执行的语句,处于就绪状态。是否存在程序会等待Thread1继续执行而不是将执行交给Thread2的情况?我已经删除了两个线程之间的所有依赖关系,并确保Thread2没有在等待任何资源。感谢回复。 最佳答案 Thisarticleonmul

c++ - 这段代码的编译是标准行为吗?

考虑以下代码:structUndefined;templatevoidTemplateFunction(){Undefinedobj;}intmain(){return0;}我一直觉得模板函数和模板方法(或模板类的方法部分)只会检查语法(除非它们被实例化),在这种情况下,上面的代码应该编译。问题是,它不能用Xcode(版本:4.3.2,使用LLVM编译器)编译,现在我想知道上面的代码是否是非标准的,即它应该不编译符合C++03标准的编译器?Xcode的错误是:Variablehasincompletetype"Undefined"请注意,在原始代码中,undefinedobject是静

c++ - 在 Windows 7 中读取注册表行为异常

我正在尝试使用C++读取Windows7中注册表的“(默认)”值,以下是我正在使用的代码:stringGetSZValueUnique(HKEYopenKey,constchar*regkey,constchar*keyName){HKEYhKey=0;BYTEdata[512];DWORDszsize=512;stringvalue;LONGretValue=RegOpenKeyEx(openKey,regkey,0,KEY_READ,&hKey);if(retValue==ERROR_SUCCESS){LONGretV=RegQueryValueEx(hKey,keyName,0,

c++ - 启用 c++11 时 c++ 递归模板的奇怪行为

我试图理解我收到的一些递归C++模板代码,但遇到了一些奇怪的行为。出于某种原因,编译器似乎能够在编译时添加两个值,但必须在运行时进行左移。即便如此,只有当我尝试在启用c++11的情况下进行构建时才会出现问题。代码(我已经归结,你稍后会看到)定义了两对模板——一对名为shft和shft_aux和一对名为add和add_aux递归生成它们自己。顺便说一句,add模板不应该有用,它的唯一目的是演示问题,而不是生成实际的min值。如果我在没有命令行参数的情况下编译这段代码,它编译得很好。但是,如果我指定-std=c++11-stdlib=libc++,add_aux上的static_asser

c++ - 使用 lambda 构造 std::function 时 libstdc++ 和 libc++ 之间的不同行为

这个问题来自thisquestion.以下代码compilesfine将clang3.4与libstdc++结合使用:#includeintmain(){std::functionf=[](){};}但是failsmiserably使用clang3.4和libc++:Infileincludedfrommain.cpp:1:Infileincludedfrom/usr/include/c++/v1/functional:465:Infileincludedfrom/usr/include/c++/v1/memory:599:/usr/include/c++/v1/tuple:320:1

c++ - 自动生成的 move 构造函数导致非法行为

我问aquestionaboutmoveconstructors,但我尚未接受答案,因为即使在我开始对其他方面有所了解时,我对问题的某些方面也感到更加困惑。特别是,我发现了一个令人惊讶的情况,其中g++和clang++都生成不正确的move-constructor。问题总结g++和clang++显然违反了以下规则:明确定义析构函数时,不生成move-constructors。为什么?这是一个错误,还是我误会发生了什么?为了正确起见,这些(可能是非法的)move构造函数应使RHS指针成员无效,但它们不会无效。为什么不?看来,避免不良行为的唯一方法是为每个在其析构函数中使用delete的类

c++ - 是否尝试修改 const_cast-ed,但动态分配的常量对象仍然是未定义的行为?

这个问题在这里已经有了答案:Canaheap-allocatedobjectbeconstinC++?(6个答案)关闭7年前。例如:constint*pc=newconstint(3);//notetheconstint*p=const_cast(pc);*p=4;//undefinedbehavior?特别是,编译器能否优化掉分配给堆的*pc?如果不是,尝试通过p修改*pc是否仍然构成未定义的行为-如果是,为什么?

c++ - 继承和 is_detected_v 提供了一个奇怪的结果 (C++17)

我有简化版的代码:#includetemplateusinghas_data_t=decltype(T::data());templateconstexprautoget_data(){returnstd::experimental::is_detected_v;}templatestructopt_base{staticconstexprbooli=get_data();//staticconstexprautoj=get_data();//failtocompile};structopt:publicopt_base{staticintdata(){return7;}};intma

c++ - 自 1.55 以来 boost::bind/boost::function 的奇怪行为变化

我正在尝试编译aproject这是针对Boost1.55和较新的Boost1.63编写的,我遇到了一个与bind/function相关的非常奇怪的错误。这是完整的、简化的测试用例:#include#includetemplateclassfoo{public:usingfunction_t=boost::function3;voidset_function(function_tf){func_=f;}private:function_tfunc_;};classbar{public:bar(){foo_.set_function(boost::bind(&bar::func,this,

c++ - 从它之后声明的另一个成员数据初始化一个成员数据是未定义的行为吗?

如果我的类声明了两个成员数据x_和y_以便从y_初始化x_>和y_有一个值那么x_有一个Undefinedvalue吗?或者是什么?classEmpl{public:intx_{y_};inty_{10};};intmain(){Emple{};std::cout我在MSVC++2105上尝试了该示例并得到:0和10而在GCC上我得到了10和10!那么这样做是不是未定义的行为? 最佳答案 Soasaresultisitundefinedbehaviortodoso?是的。读取不确定值的行为是未定义的。在本例中,y_的值用于初始化x_